home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / AIncludes / FixMath.a < prev    next >
Encoding:
Text File  |  1997-08-12  |  6.6 KB  |  288 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        FixMath.a
  3. ;
  4. ;    Contains:    Fixed Math Interfaces.
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Release:    Universal Interfaces 3.0.1
  8. ;
  9. ;    Copyright:    © 1985-1997 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        Please include the the file and version information (from above) with
  12. ;                the problem description.  Developers belonging to one of the Apple
  13. ;                developer programs can submit bug reports to:
  14. ;
  15. ;                    devsupport@apple.com
  16. ;
  17. ;
  18.     IF &TYPE('__FIXMATH__') = 'UNDEFINED' THEN
  19. __FIXMATH__ SET 1
  20.  
  21.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  22.     include 'Types.a'
  23.     ENDIF
  24.  
  25.  
  26.  
  27.  
  28. fixed1                            EQU        $00010000
  29. fract1                            EQU        $40000000
  30. positiveInfinity                EQU        $7FFFFFFF
  31. negativeInfinity                EQU        $80000000
  32. ;    Previously in ToolUtils.i.  Moved here because it makes more sense.
  33. ;
  34.  
  35.     IF ¬ OLDROUTINELOCATIONS THEN
  36. ;
  37. ; pascal Fixed FixRatio(short numer, short denom)
  38. ;
  39.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  40.         _FixRatio:    OPWORD    $A869
  41.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  42.         IMPORT_CFM_FUNCTION FixRatio
  43.     ENDIF
  44.  
  45. ;
  46. ; pascal Fixed FixMul(Fixed a, Fixed b)
  47. ;
  48.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  49.         _FixMul:    OPWORD    $A868
  50.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  51.         IMPORT_CFM_FUNCTION FixMul
  52.     ENDIF
  53.  
  54. ;
  55. ; pascal short FixRound(Fixed x)
  56. ;
  57.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  58.         _FixRound:    OPWORD    $A86C
  59.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  60.         IMPORT_CFM_FUNCTION FixRound
  61.     ENDIF
  62.  
  63.     ENDIF
  64. ;
  65. ; pascal Fract Fix2Frac(Fixed x)
  66. ;
  67.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  68.         _Fix2Frac:    OPWORD    $A841
  69.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  70.         IMPORT_CFM_FUNCTION Fix2Frac
  71.     ENDIF
  72.  
  73. ;
  74. ; pascal long Fix2Long(Fixed x)
  75. ;
  76.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  77.         _Fix2Long:    OPWORD    $A840
  78.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  79.         IMPORT_CFM_FUNCTION Fix2Long
  80.     ENDIF
  81.  
  82. ;
  83. ; pascal Fixed Long2Fix(long x)
  84. ;
  85.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  86.         _Long2Fix:    OPWORD    $A83F
  87.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  88.         IMPORT_CFM_FUNCTION Long2Fix
  89.     ENDIF
  90.  
  91. ;
  92. ; pascal Fixed Frac2Fix(Fract x)
  93. ;
  94.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  95.         _Frac2Fix:    OPWORD    $A842
  96.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  97.         IMPORT_CFM_FUNCTION Frac2Fix
  98.     ENDIF
  99.  
  100. ;
  101. ; pascal Fract FracMul(Fract x, Fract y)
  102. ;
  103.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  104.         _FracMul:    OPWORD    $A84A
  105.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  106.         IMPORT_CFM_FUNCTION FracMul
  107.     ENDIF
  108.  
  109. ;
  110. ; pascal Fixed FixDiv(Fixed x, Fixed y)
  111. ;
  112.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  113.         _FixDiv:    OPWORD    $A84D
  114.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  115.         IMPORT_CFM_FUNCTION FixDiv
  116.     ENDIF
  117.  
  118. ;
  119. ; pascal Fract FracDiv(Fract x, Fract y)
  120. ;
  121.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  122.         _FracDiv:    OPWORD    $A84B
  123.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  124.         IMPORT_CFM_FUNCTION FracDiv
  125.     ENDIF
  126.  
  127. ;
  128. ; pascal Fract FracSqrt(Fract x)
  129. ;
  130.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  131.         _FracSqrt:    OPWORD    $A849
  132.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  133.         IMPORT_CFM_FUNCTION FracSqrt
  134.     ENDIF
  135.  
  136. ;
  137. ; pascal Fract FracSin(Fixed x)
  138. ;
  139.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  140.         _FracSin:    OPWORD    $A848
  141.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  142.         IMPORT_CFM_FUNCTION FracSin
  143.     ENDIF
  144.  
  145. ;
  146. ; pascal Fract FracCos(Fixed x)
  147. ;
  148.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  149.         _FracCos:    OPWORD    $A847
  150.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  151.         IMPORT_CFM_FUNCTION FracCos
  152.     ENDIF
  153.  
  154. ;
  155. ; pascal Fixed FixATan2(long x, long y)
  156. ;
  157.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  158.         _FixATan2:    OPWORD    $A818
  159.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  160.         IMPORT_CFM_FUNCTION FixATan2
  161.     ENDIF
  162.  
  163. ;    Frac2X, Fix2X, X2Fix, and X2Frac translate to and from
  164. ;    the floating point type "extended" (that's what the X is for).
  165. ;    On the original Mac this was 80-bits and the functions could be
  166. ;    accessed via A-Traps.  When the 68881 co-processor was added,
  167. ;    it used 96-bit floating point types, so the A-Traps could not 
  168. ;    be used.  When PowerPC was added, it used 64-bit floating point
  169. ;    types, so yet another prototype was added.
  170. ;
  171.  
  172. ;
  173. ; pascal extended Frac2X(Fract x)
  174. ;
  175.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  176.         _Frac2X:    OPWORD    $A845
  177.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  178.         IMPORT_CFM_FUNCTION Frac2X
  179.     ENDIF
  180.  
  181. ;
  182. ; pascal extended Fix2X(Fixed x)
  183. ;
  184.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  185.         _Fix2X:    OPWORD    $A843
  186.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  187.         IMPORT_CFM_FUNCTION Fix2X
  188.     ENDIF
  189.  
  190. ;
  191. ; pascal Fixed X2Fix(extended x)
  192. ;
  193.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  194.         _X2Fix:    OPWORD    $A844
  195.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  196.         IMPORT_CFM_FUNCTION X2Fix
  197.     ENDIF
  198.  
  199. ;
  200. ; pascal Fract X2Frac(extended x)
  201. ;
  202.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  203.         _X2Frac:    OPWORD    $A846
  204.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  205.         IMPORT_CFM_FUNCTION X2Frac
  206.     ENDIF
  207.  
  208.  
  209.     IF TARGET_CPU_PPC THEN
  210. ;
  211. ; extern short WideCompare(const wide *target, const wide *source)
  212. ;
  213.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  214.         IMPORT_CFM_FUNCTION WideCompare
  215.     ENDIF
  216.  
  217. ;
  218. ; extern WidePtr WideAdd(wide *target, const wide *source)
  219. ;
  220.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  221.         IMPORT_CFM_FUNCTION WideAdd
  222.     ENDIF
  223.  
  224. ;
  225. ; extern WidePtr WideSubtract(wide *target, const wide *source)
  226. ;
  227.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  228.         IMPORT_CFM_FUNCTION WideSubtract
  229.     ENDIF
  230.  
  231. ;
  232. ; extern WidePtr WideNegate(wide *target)
  233. ;
  234.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  235.         IMPORT_CFM_FUNCTION WideNegate
  236.     ENDIF
  237.  
  238. ;
  239. ; extern WidePtr WideShift(wide *target, long shift)
  240. ;
  241.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  242.         IMPORT_CFM_FUNCTION WideShift
  243.     ENDIF
  244.  
  245. ;
  246. ; extern unsigned long WideSquareRoot(const wide *source)
  247. ;
  248.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  249.         IMPORT_CFM_FUNCTION WideSquareRoot
  250.     ENDIF
  251.  
  252. ;
  253. ; extern WidePtr WideMultiply(long multiplicand, long multiplier, wide *target)
  254. ;
  255.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  256.         IMPORT_CFM_FUNCTION WideMultiply
  257.     ENDIF
  258.  
  259. ;  returns the quotient 
  260. ;
  261. ; extern long WideDivide(const wide *dividend, long divisor, long *remainder)
  262. ;
  263.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  264.         IMPORT_CFM_FUNCTION WideDivide
  265.     ENDIF
  266.  
  267. ;  quotient replaces dividend 
  268. ;
  269. ; extern WidePtr WideWideDivide(wide *dividend, long divisor, long *remainder)
  270. ;
  271.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  272.         IMPORT_CFM_FUNCTION WideWideDivide
  273.     ENDIF
  274.  
  275. ;
  276. ; extern WidePtr WideBitShift(wide *src, long shift)
  277. ;
  278.     IF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  279.         IMPORT_CFM_FUNCTION WideBitShift
  280.     ENDIF
  281.  
  282.     ENDIF    ; TARGET_CPU_PPC
  283.  
  284.     ENDIF ; __FIXMATH__ 
  285.  
  286.